perm filename SAVE2[F8,ALS]2 blob sn#317169 filedate 1977-11-19 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00010 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	*CHECKERS as of November 17 1977.  EQU's
C00008 00003	  ORG  H'1800' SELE JUMP
C00023 00004	* NORM  FORE
C00034 00005	* RASC SCRA FKT STMV
C00039 00006	* NEXT  FIND  RFJ  LFJ  RBJ  LBJ
C00053 00007	* RFN LFN RBN LBN NORF NORT
C00060 00008	* AFT
C00071 00009	* EVAL
C00076 00010	* EMPT WAST BRAK
C00083 ENDMK
C⊗;
*CHECKERS as of November 17 1977.  EQU's
* S2 section
*Resident package addresses
JOYT    EQU     H'0C00'
LINE    EQU     H'0FDF'
SHCB    EQU     H'0FE2'
INPF    EQU     H'0FE3'
WTLN    EQU     H'0FE5'
TXC     EQU     H'0FE8'
CMRG    EQU     H'0FEA'
DBNC    EQU     H'0FEB'
UPI     EQU     H'0FFA'
JOYI    EQU     H'21AD'
IJS     EQU     H'22DB'
SHL     EQU     H'27C6'
SHR     EQU     H'27D3'
PUSH    EQU     H'40A9'
POPS    EQU     H'40BC'
SPS     EQU     H'40D0'
WDG     EQU     H'4105'
WAUD    EQU     H'41C8'
WAU1    EQU     H'41CC'
CDS     EQU     H'41D5'
WMS     EQU     H'4205'
UDAT    EQU     H'424D'
TRAN    EQU     H'43CD'
FCS     EQU     H'43D6'
WAIT    EQU     H'4501'
TIR     EQU     H'45DB'
CLER    EQU     H'4762'
*Misc. constants
TCMD    EQU     H'44'
BCMD    EQU     H'6D'
TCOL    EQU     H'80'   TEXT COLOR
ULIN    EQU     H'F5'
COM     EQU     H'8F7'
*
*RAM assignments
BFLG    EQU     H'0C20'
BLNF    EQU     H'0C21'        Blink flag
XBLN    EQU     H'0C22'        X value to blink
YBLN    EQU     H'0C23'        Y value to blink
BCNT    EQU     H'0C24'        Counter used in OKMV
BKMV    EQU     H'0C25'        Data to index book moves
HSAV    EQU     H'0C26'        H save location
HSAL    EQU     H'0C27'        HL save location
PLY0    EQU     H'0C28'        Players choice of ply depth
COL0    EQU     H'0C29'        0 if machine plays black
SELX    EQU     H'0C2A'        Move count
AP20    EQU     H'0C2C'        ACTM+PASM+2 at HL=20
PFLG    EQU     H'0C2D         Player's move flag
OBJ0    EQU     H'0C30'        Board 1, thru H'0E0F'
TREE    EQU     H'0E10'        Tree data, thru H'0EFF', Player's board first
TRE2    EQU     H'0E20'        Machine's first board here
TRE3    EQU     H'0E30'        PLY 1 location
TRE5    EQU     H'0E50'        PLY 3 location
PLMD    EQU     H'0E5B'        Used for temp store of player's move inf
PLMV    EQU     H'0ED0'        Overlay region used for player's moves
PLMF    EQU     H'0EE0'           and move numbers
SCOR    EQU     H'0EF0'        28 bytes for scores
XPOS    EQU     H'0F0C'        XPOSITION(CURSOR)
YPOS    EQU     H'0F0F'        YPOSITION(CURSOR)
OBJ1    EQU     H'0F10'        Board 2, thru H'0FAF'
MOBS    EQU     H'0FB0'         Mobility and DJ flags (14 bytes)
RGSV    EQU     H'0FC1'        Register save start (int. update)
*
*Scratch pad assignments
TEMP   EQU     H'8'
J      EQU     H'9'
HU     EQU     H'A'
HL     EQU     H'B'
PLOC   EQU     O'3'            LISU value for ACTIVE and PASSIVE
KLOC   EQU     O'4'            LISU value for KING's and special data
ELOC   EQU     O'5'            LISU value for EMPTY's area
ISA    EQU     O'30'           ISAR value for active area
ISP    EQU     O'34'           ISAR value for passive
ISK    EQU     O'40'           ISAR value for kings
ACTM   EQU     O'46'           Location of Active material count
PASM   EQU     O'47'           Location of Passive material count
ISE0   EQU     O'50'           ISAR value for guard byte
ISE    EQU     O'51'           ISAR value foempty (with offset)
*Mimimum ply depths
PLYT   EQU     H'FE'           Ply depth for Robot Tom (stored as neg.)
PLYD   EQU     H'FD'           Ply depth for Robot Dick
PLYH   EQU     H'FC'           Ply depth for Robot Harry
*SPECIAL CONSTANTS
X       EQU     H'1'
Y       EQU     H'2'
VX      EQU     H'3'
VY      EQU     H'4'
CHT     EQU     H'3'    CURSOR HEIGHT
YTST    EQU     H'9'
XZOP    EQU     H'34'   Line for restorre of X zoom
MAXY    EQU     H'4D'   MAX Y COORD (=H'4F'-CHT)
*Linkage locations
PMOV    EQU     H'1100'         Player's move
WMC     EQU     H'1200'         Write message
BORD    EQU     H'1300'         Normal redo of board
SHOW    EQU     H'1780'         Debugging aid to show board
  ORG  H'1800' SELE JUMP
*-*-*-
SELE    PI      SHOW
        PI      WAST            Debugging show board
        LISU    PLOC
        LISL    0
        LR      DC,H
        LIS     H'C'            To get MOVE byte
        ADC
        LM
        LR      0,A             Save it temporarily
        NS      0               To set status byte
        BNZ     SEL3
        JMP     NEXT            To get next MOVE byte
SEL3    CLR
        COM                     -1 in A
        ADC                     Get back to move byte
        AS      0
        NS      0               Remove right-most on-bit
        ST                      Put remaining bits back (and index)
        XS      0               This gets the extracted bit
        LR      6,A             Save it in 6
        LM                      Now get the byte designation
SEL4    LR      5,A
        SR      1
        SR      1
        NI      H'3'            Separate the byte indicator part
        LR      4,A             Save it in 4
        LR      A,5
        NI      H'13'           Separate the JUMP bit and the direction
        LR      5,A             Save them in 5
DELE    LI      ISA             Process Active and Kings for source deletion
        AS      4               Add byte #
        LR      IS,A            Get to initial byte
        LR      A,S
        LR      3,A
        XS      6               Delete moving piece
        LR      S,A             from byte
        LISU    KLOC            To get to corresponding KING byte
        LR      A,S
        NS      6               Was the piece a king?
        BZ      DEL2
        XS      S               If it was delete king bit
        LR      S,A
        LIS     H'7'            Non-zero in 2 for king 
DEL2    LR      2,A             0 for man, 7 for king, (later 1 for promotion)
        LISU    PLOC            Back to active section
*Now locate captured piece if jump or find destination in normal move
        LR      A,6             Recall MOVE bit
        SR      4
        BZ      INRH            Bit was in right half of byte
INLH    LR      3,A             Save partially shifted MOVE bit
        LIS     H'1'            Get direction
        NS      5               To test right-most bit
        BZ      INL2            RF or LB move where 4 shift is correct
        LR      A,3
        SR      1               LF and LB require an additional shift
        LR      3,A
INL2    LIS     H'2'            Now test for fore or aft
        NS      5   
        BZ      BOTH            Forward move, no byte shift needed
        LR      A,D             Only to decrement ISAR
INL3    BR      BOTH
*
INRH    LR      A,6             Get MOVE bit again
        SL      4               Left shift if in right half
        LR      3,A             Save partially shifted MOVE bit
        LIS     H'1'
        NS      5               Get direction
        BNZ     INR2            LF or LB where 4 shift is correct
        LR      A,3
        SL      1               RF and RB require an additional shift
        LR      3,A
INR2    LIS     H'2'            Now test fore and aft
        NS      5
        BNZ     BOTH
        LR      A,I             Only to increment ISAR
BOTH    LR      A,5             Now is this a jump or a normal move?
*ISAR still points to active region but may designate
*an empty square or the capture square
        SR      4               Set status for jump bit
        BNZ     JUMP
        JMP     NORM            It's a normal move
JUMP    LR      A,IS
        AI      H'4'            To get to passive pieces
        LR      IS,A
        LR      A,S
        XS      3               Remove captured piece
        LR      S,A
        LR      A,IS
        AI      H'4'            Corresponding king location
        LR      IS,A
        LR      A,S             Get byte
        NS      3               Is the piece a king?
        BZ      JUM1            No
        XS      S               Yes, Remove it
        LR      S,A
        LIS     H'2'
        COM
        BR      JU11
JUM1    LIS     H'1'
        COM
JU11    LR      0,A
        LI      PASM
        LR      IS,A
        LR      A,S
        AS      0
        LR      S,A
        LI      ISA             Back to moved-from location
        AS      4               Byte number is in 4
        LR      IS,A
        LIS     H'2'
        NS      5               Test for fore or aft
        BZ      JUMA            Fore move
        LR      A,D             Decrement ISAR (destination always in next byte)
        BR      JUMB
JUMA    LR      A,I             Increment ISAR
JUMB    LR      A,IS            Get the destination byte off-set
        AI      H'E8'           by subtracting O'30' from ISAR value
        LR      4,A             needed if there is a continuation
        LIS     H'1'            Get direction
        NS      5               Test for right or left
        LR      A,6             Get original piece location
        BZ      JUM2            0 for R move, ≠0 for L move
        SR      1               Left moves involve a right shift of 1
        BR      JUM3
JUM2    SL      1               Right moves involve a left shift of 1
JUM3    LR      3,A             Save bit byte in 3, freeing 6 for other use
        LR      A,S
        XS      3               Set piece down
        LR      S,A
        CLR
        AS      2               Was the piece a king?
        BZ      JUMC            No, might be a promotion
        CLR
        LR      0,A             Temporary record of promotion credit
        BR     JUM6             Already a king so no promotion
JUMC    LIS     H'2'
        NS      5               Which side is active
        LR      A,IS
        BZ      JUM4            0 if forward
        CI      O'30'           Is this byte 0?
        BNZ     JU71            No, so no promotion
        LIS     H'F'            and the king row?
        SL      4
        BR      JUM5            Promotion indicated, no double jump
JUM4    CI      O'33'           Is this byte 3?
        BNZ     JU71            No, so no promotion
        LIS     H'F'            and the king row?
JUM5    NS      3
        BZ      JU71            No
        LIS     H'1'            1 for promotion
        LR      2,A             It was 0
        LR      0,A             Credit for promotion
        LR      6,A             Used in FIND for no continuation
JUM6    LISU    KLOC            Get to King position
        LR      A,S
        AS      3               Put down the king
        LR      S,A
        LR      A,0
        CI      H'1'            Was there a promotion?
        BZ     JU71             No
        LISU    4
        LISL    6
        LR      A,S
        INC                     Add for promotion
        LR      S,A
        BR      JUM9            Can be no continuation if promotion
JUM7    CLR
        XS      0               Should we check for a double jump?
        BZ     JU71             Yes, a 0 means no promotion
JUM9    JMP    FORE
* Set up conditions to try to find a continuation
JU71    JMP     FORE            DEBUGGING BYPASS ----
        LR      A,HL
        SR      4
        CI      H'A'            Is there room?
        BM      JUM9            No
        LR      DC,H
        LI      H'1C'           Get to byte location
        ADC                     in the "passed board" position
        LR      A,3             Save destination info
        ST                      the move byte
        LR      A,4
        ST                      and the byte #
        CLR
        COM                     and a flag of -1
        ST                      in the ACTM position
        LR      6,A             Continuation signal to FIND
        DCI     SCOR            Advance score
        LR      A,HL
        SR      4
        AI      -H'2'           Scor not saved for HL=1
        SL      1
        ADC                     from current board
        LR      Q,DC
        LM
        LR      0,A
        LM
        LR      1,A
        LR      DC,Q
        LIS     H'4'
        ADC                     to continuation board
        LR      A,0
        ST
        LR      A,1
        ST
        LIS     H'2'            Copy data two blocks forward
        SL      4
        AS      HL
        LR      HL,A
        LR      DC,H
        LISU    PLOC            SC to RA direct
        LISL    0
JU72    LR      A,I
        ST
        BR7     JU72
        LR      A,I
        ST
        LISU    KLOC
JU73    LR      A,I
        ST
        BR7     JU73
        LR      A,I
        ST
        LR      A,3
        LR      1,A             Mask for FIND
        LR      DC,H
        PI      RASC            Load scratchpad
        LR      DC,H
        PI      EMPT
        JMP     RFJ             Find continuations if any
* NORM  FORE
*Now make normal move
NORM    LR      DC,H            Back in step
        CLR
        LR      0,A             Flag for no promotion
        LISU    PLOC            Get back to Active pieces
        LR      A,S             LISL still OK
        AS      3
        LR      S,A             Put in moved piece
        LR      A,2             Was it a king
        NS      2
        BNZ     NOM6            Yes so don't promote but do put king down
        LIS     H'2'
        NS      5               Test for direction
        LR      A,IS
        BZ      NOM4            Is it going forward?
        CI      O'30'           Did it get to the byte 0?
        BNZ     FORE            No
        LIS     H'F'           and in king row?
        SL      4
        BR      NOM5            Mark for promotion
NOM4    CI      O'33'           Did it get to byte 3?
        BNZ     FORE            No
        LIS     H'F'            and in king row?
NOM5    NS      3
        BZ      FORE            No
        LIS     H'1'
        LR      0,A             A promotion flag
NOM6    LISU    KLOC            Now get to king byte
        LR      A,S             Get corresponding king byte for destination
        AS      3               Insert king
        LR      S,A             And replace byte
        CLR
        AS      0
        BZ      FORE
        LI      ACTM            Get to active  material location
        LR      IS,A
        LR      A,S
        INC                     Credit for promotion
        LR      S,A
FORE    LR      A,HL            Where are we?
        CI      H'10'
        BZ      FOR5            Player's move has been made
        PI      SHOW            DEBUGGING AID
        PI      WAST
        LR      A,7
        COM                     Change color
        LR      7,A
        LIS     H'1'
        SL      4
        AS      HL
        LR      HL,A
        LR      DC,H            GET back in step
        PI      SCRA            Prepare for normal advance
        LR      A,HL            Can we advance score?
        SR      4
        CI      H'3'            Note HL has already been advanced
        BM      FOR2            Advance score normally
        BNZ     FOR4            Special case
        DCI     SCOR+2
        LIS     H'C'
        SL      4               Use H'C000' for HL=30 level
        ST
        CLR
        ST
        BR      FOR4            May still be a special case
FOR2    AI      -H'2'           Scor not saved for HL=10
        SL      1               Scores take 2 bytes each so *2
        DCI     SCOR
        ADC                     Current location
        LR      Q,DC
        XDC
        LR      DC,Q
        LI      H'3'
        COM                     Fast -H'4'
        ADC                     Get to earlier entry
        LM                      Copy it
        XDC
        ST
        XDC
        LM
        XDC
        ST
FOR3    JMP     FIND            Go forward normally
FOR4    DCI     SELX
        LR      Q,DC
        LM
        CI      H'1'
        BM      FOR3            Normal play
        INC                     Book or random move has been made
        LR      DC,Q
        ST                      so count this as a move
        CLR                     Clear start of PLMV list for
        DCI     PLMV            listing player's possible moves
        ST
        LR      DC,H
        XDC
        DCI     TREE            Prepare for TRAN
        LR      H,DC
        LIS     H'1'
        SL      4
        LISU    2
        LISL    0
        LR      S,A
        PI      TRAN
        JMP     FIND            FIND exits to PMOV when HL is H'10'
FOR5    PI      BORD            Show board after players move
        LIS     H'4'            "MY MOVE"
        LR      0,A
        PI      WMC
        DCI     SCOR            Start scores off at H'C000'
        LI      H'C0'           so that CM's will always work
        ST
        CLR
        ST
        LI      H'C0'
        ST
        CLR
        ST
        LR      A,7
        COM                Change color
        LR      7,A
        LIS     H'1'
        SL      4
        AS      HL
        LR      HL,A
        LR      DC,H            Advance H
        PI      SCRA            SC to RA with sides reversed
        LR      DC,H
        PI      RASC            RA to SC preparing for a normal move
        DCI     SELX
        LR      Q,DC
        LM
        INC                     Add 1 to move count
        LR      DC,Q
        ST
        CI      H'1'
        BZ      FOR6            Use stored move
        JMP     FIND            Go find normal reply
FOR6    LISU    2               Get random number
        LISL    5
        LIS     H'3'
        NS      S               0 to 3 random number
        LR      0,A
        SR      1
        LR      1,A             0 to 1 random number
        LIS     H'1'
        NS      0   
        LR      0,A             2nd 0 to 1 random number
* Machine to make 2nd move from book
        DCI     BKMV            Get stored move munber
        LM
        SL      1               X2, 2 entries for each input move
        AS      0               Random choice between them
        DCI     BOK2            Stored table of book replies
        ADC
        LM                      Get reply number
        LR      0,A
        CLR                     Use second number to select which half
        XS      1
        LR      A,0
        BZ      BMV2
        SR      4
BMV2    NI      H'7'
        LR      0,A             The final selection
        DCI     REDM            Possible Red moves
BM17    LM                      Get byte record
        LR      1,A
BM18    LR      A,1
        NS      1
        BNZ     BM19            Is this byte exhausted?
        LM                      Step over byte info
        BR      BM17            Go to next byte record
BM19    LR      2,A
        AI      H'FF'           Subtract 1
        NS      1
        LR      1,A             byte less rightmost bit
        XS      2               This leaves 1 bit in A
        DS      0
        BP      BM18
        LR      6,A             Save the byte bit
        LM                      Get the byte info
        LR      4,A             The byte indicator
        LR      DC,H
        LIS     H'C'
        ADC
        LR      A,6
        ST
        LR      A,4
        ST
        JMP     SELE
*-*-*- Initial moves for red
REDM   DC      B'00000111'      3 pieces
       DC      B'00001010'      Byte 2, RB
       DC      B'00001111'      4 pieces
       DC      B'00001011'      Byte 2, LB
       DC      H'00'
* RASC SCRA FKT STMV
*-*-*- RASC RAM to SC transfer
RASC    LR      K,P             RAM to SC
        LISU    PLOC           ←SC buffer with Active and Passive
        LISL    0
RAS2    LM
        LR      I,A
        BR7     RAS2
        LM
        LR      I,A
        LISU    KLOC
RAS3    LM
        LR      I,A
        BR7     RAS3
        LM
        LR      I,A
        PK
*  SCRA  SC to RAM with side reversal
SCRA    LR      K,P             SC to RAM for side reversal
        LISU    PLOC
        LISL    4
        LIS     H'8'
        LR      0,A
SCR1    LR      A,I
        ST
        DS      0
        BNZ     SCR1
        LISU    KLOC
        LISL    0
        LIS     H'4'
        LR      0,A
SCR2    LR      A,I
        ST
        DS      0
        BNZ     SCR2
        CLR
        ST
        ST
        LISL    7
        LR      A,D
        ST
        LR      A,D
        ST
        PK
*-*-*- Test if Kings only can move
FKT     LR      K,P
        CLR
        AS      7
        BNZ     FK1             Only kings in this direction
FKT2    CLR
        XS      3
        PK                      Normal pieces OK
BKT     LR      K,P
        CLR
        AS      7             Test sides for backward move
        BNZ     FK2             NORMAL pieces can move
FK1     LIS     H'2'
        SL      4
        AS      4
        LR      IS,A            KINGS only can move
        LR      A,S
        NS      3
        LR      3,A
FK2     PK
*Subroutine to add to MOBILITY, and to store MOVE and FLAG bytes if necessary
STMV    LR      K,P
        LR      A,HL
        SR      4
        CI      H'01'           Is this the player's board
        BNZ     STM3            No
        DCI     PLMV            Player's moves stored separately
STM0    CLR
        XM
        BZ      STM1            Find empty space
        LM                      Skip info space
        BR      STM0            Try again
STM1    CLR                     Back up
        COM
        ADC
        LR      A,3
        ST
        LR      A,4
        SL      1
        SL      1
        AS      5
        ST
        CLR
        ST                      Store 0 as stop
        BR      STM2
STM3    CLR
        XS      2               To set status byte
        BNZ    STM2            One is already stored
        LR      DC,H            Get back in step (may not be necessary)
        LIS     H'C'            To get to MOVE byte
        ADC
STM4    LR      A,3
        ST                      Store MOVE byte in RAM
        LR      A,4             Get the byte pointer
        SL      1
        SL      1
        AS      5
        ST                      Put this into RAM
        LR      DC,H            May be necessary
STM2    CLR
        LR      0,A             To accumulate count
        LR      A,3
STM5    DS      0
        AI      H'FF'
        NS      3               Removes rightmost bit
        LR      3,A
        BNZ     STM5
        LR      A,0
        COM
        INC
        AS      2               Add in previous count
        LR      2,A
        PK
* NEXT  FIND  RFJ  LFJ  RBJ  LBJ
NEXT    PI      EMPT            Needs redoing if came to SELE via AFT
        LR      DC,H            
        LR      A,HL
        CI      H'30'
        BP      NEXX            Can not be a continuation
        LIS      H'3'           Look to earlier board data
        COM
        ADC
        LM
        LR      1,A             Get move byte just in case
        LM
        LR      4,A             and byte info
        CLR     
        LR      2,A
        XM                      Now look at ACTM
        BP      NEXX            Not a continuation board
        LR      DC,H
        LIS     H'D'
        ADC
        LIS     H'3'            Get last used direction
        NM
        INC
        CI      H'3'
        BM      NEXY            Last direction used
        LR      5,A
        CLR
        COM
        LR      6,A             Set continuation flag
        JMP     RBJ0
NEXX    LR      DC,H
        LIS     H'D'            Last used byte info
        ADC
        LM
        LR      5,A
        NI      H'F'
        INC
        LR      0,A
        CI      H'F'            Is this the last byte and direction?
        BP      NEXA
NEXY    JMP     AFT             Yes, so back up
NEXA    LR      DC,H
        LIS     H'1'            Set to 1 for normal back-up
        LR      6,A
        CLR
        COM
        LR      1,A             All pieces allowed to move
        LR      DC,H
        LR      A,0
        SR      1
        SR      1
        NI      H'3'
        LR      4,A
        LR      A,5
        CI      H'F'
        LIS     H'3'
        BM      NEXJ            Jumps required
        NS      0
        LR      5,A
        BZ      NEN0
        JMP     RBN0
NEN0    JMP     RFN
NEXJ    NS      0
        LR      5,A
        BZ      NEJ0
        JMP     RBJ0
NEJ0    JMP     RFJ
*We enter here on going forward
FIND    LR      DC,H
        LR      A,HL
        CI      H'20'
        BNZ     FIN1
        LIS     H'E'            Compute ACTM+PASM+5
        ADC
        LIS     H'5'            Allows for 3 promotes
        AM
        AM
        DCI     AP20            Used by EVAL to compute MAT
        ST
        LR      DC,H
FIN1    PI      RASC            Get board into SC
        PI      EMPT            Compute the empty squares
        PI      SHOW
        PI      WAST
        CLR
        LR      4,A             Start with byte 0
        LR      2,A             Mobility count and move-found flag
        LR      6,A             So all moves will be found
        COM
        LR      1,A             To find all possible jump moves
RFJ     LI      ISA             Active pieces
        AS      4               Add byte off-set
        LR      IS,A            Get to byte
        LR      A,S
        NS      1               FF if normal, 1 bit only for continuation
        LR      3,A             3 used to develop final byte
        PI      FKT             Any forward moving pieces?
        BZ      RBJ             No, look to backward moving
        LI      ISE+1           Look to empty squares forward
        AS      4               Add byte off-set
        LR      IS,A            Destination byte location
        LR      A,S
        SR      1
        NS      3
        LR      3,A             Only pieces that have place to land
        LI      ISP             Passive pieces
        AS      4
        LR      IS,A
      LR      A,I            Look to RF passive pieces forward
      SL      4              In front of left-most bits
      LR      0,A
      LR      A,S
      SR      4              In front of right-most bits
      SR      1
      AS      0
      NS      3
      LR      3,A            Pieces that can jump RF
        BZ      LFJ          Were any found?
        LI      H'1'           The RFJ direction and J indicator
        SL      4
        LR      5,A
        PI      STMV            Store move byte and info
        CLR
        AS      6               Recall indicator
        BZ      LFJ             We want all moves
        JMP     SELE
LFJ     LI      ISA
        AS      4               Add byte off-set
        LR      IS,A            Get to initial byte
        LR      A,S
        NS      1               FF if normal, 1 bit only for continuation
        LR      3,A
        PI      FKT
        LI      ISE+1           Empty squares forward
        AS      4
        LR      IS,A
        LR      A,S
        SL      1
        NS      3
        LR      3,A             Only pieces that have a place to land
        LI      ISP
        AS      4
        LR      IS,A
      LR      A,I
      SL      4
      SL      1
      LR      0,A
      LR      A,S
      SR      4
      AS      0
      NS      3
      LR      3,A             Pieces that can jump LF
        BZ      RBJ
        LI      H'11'           The LFJ direction and J indicator
        LR      5,A
        PI      STMV
        CLR
        XS      6
        BZ      RBJ
        JMP     SELE
RBJ0    LR      A,5
        CI      H'2'            Which direction, 1, 2, or 3?
        BM      LBJ             It was a 3
        BNZ     LFJ             It was a 1
RBJ     LI      ISA
        AS      4               Add byte off-set
        LR      IS,A            Get to initial byte
        LR      A,S
        NS      1               FF if normal, 1 bit only for continuation
        LR      3,A
        PI      BKT             Any backward moving pieces?
        BZ      FIN3            No
        LI      ISE-1           Look to empty squares backward
        AS      4
        LR      IS,A
        LR      A,S
        SR      1
        NS      3
        LR      3,A
        LI      ISP-1           Look to passive pieces backward
        AS      4
        LR      IS,A
      LR      A,I
      SL      4
      LR      0,A
      LR      A,S
      SR      4
      SR      1
      AS      0
      NS      3
      LR      3,A             Pieces that can jump RB
        BZ      LBJ
        LI      H'12'           The RBJ direction and J indicator
        LR      5,A
        PI      STMV
        CLR
        XS      6
        BNZ     FINB
LBJ     LI      ISA
        AS      4               Add byte off-set
        LR      IS,A            Get to initial byte
        LR      A,S
        NS      1               FF if normal, 1 bit only for continuation
        LR      3,A
        PI      BKT
        LI      ISE-1           Empty squares backward
        AS      4
        LR      IS,A
        LR      A,S
        SL      1
        NS      3
        LR      3,A
        LI      ISP-1         Look to passive pieces backward
        AS      4
        LR      IS,A
      LR      A,I
      SL      4
      SL      1
      LR      0,A
      LR      A,S
      SR      4
      AS      0
      NS      3
      LR      3,A             Pieces that can jump LB
        BZ      FIN3
        LI      H'13'           The RBJ direction and J indicator
        LR      5,A
        PI      STMV
        CLR
        XS      6
        BZ      FIN4            We want them all
        BR      FINB
FIN3    CLR
        XS      6
        BM      FIN9            Continuation case
FIN4    LR      A,4             Go to next board byte
        INC
        NI      H'3'
        LR      4,A
        BZ      FIN5            There are no more
        JMP     RFJ             Go round again for next byte
FIN5    CLR
        XS      2
        BNZ      FIN7           Jumps found
        CLR
        XS      6               Go to normal moves?
        BZ      RFN             Yes
        JMP     AFT             No more jumps
FIN7    LR      A,HL
        SR      4
        CI      H'C'            Could be D maybe
        BM      FINA            Too bad, out of space
        CI      H'1'
        BNZ     FIN8
        PI      BORD
        JMP     PMOV
FIN8    AI      -H'2'
        BM      FINB
        DCI     MOBS
        ADC
        LR      A,2
        ST
FINB    JMP     SELE
FIN9    LR      DC,H            There was no continuation
        PI      RASC            Put data back into SC
        LIS     H'E'            Back up 2
        SL      4
        AS      HL
        LR      HL,A
        JMP     FORE            and go forward
FINA    LISU    KLOC            Correct PASM and stop
        LISL    H'7'
        LIS     H'1'           Allow for a piece capture
        COM
        AS      S
        LR      S,A
        JMP     EVAL
* RFN LFN RBN LBN NORF NORT
RFN     LI      ISA
        AS      4               Add byte off-set
        LR      IS,A            Get to initial byte
        LR      A,S
        LR      3,A
        PI      FKT
        BZ      RBN
        LI      ISE             Start of empty region
        AS      4               Add off-set
        LR      IS,A
      LR      A,I            Look to RF empty squares
      SL      4
      LR      0,A
      LR      A,S
      SR      4
      SR      1
      AS      0
      NS      3
      LR      3,A            Pieces that can move RF
        BZ      LFN
        CLR
        LR      5,A
        PI      STMV
        CLR
        XS      6
        BZ      LFN
        JMP     SELE
LFN     LI      ISA
        AS      4               Add byte off-set
        LR      IS,A            Get to initial byte
        LR      A,S
        LR      3,A
        PI      FKT
        BZ      RBN
        LI      ISE             Start of empty region
        AS      4               Add off-set
        LR      IS,A
      LR      A,I               Look to LF empty squares
      SL      4
      SL      1
      LR      0,A
      LR      A,S
      SR      4
      AS      0
      NS      3
      LR      3,A            Pieces that can move LF
        BZ      RBN
        LIS     H'1'
        LR      5,A
        PI      STMV
        CLR
        XS      6
        BZ      RBN
        JMP     SELE
RBN0    LR      A,5
        CI      H'2'            Which direction, 1, 2, or 3?
        BM      LBN             It was a 3
        BNZ     LFN             It was a 1
RBN     LI      ISA
        AS      4               Add byte off-set
        LR      IS,A            Get to initial byte
        LR      A,S
        LR      3,A
        PI      BKT
        BZ      NORT
        LI      ISE-1
        AS      4               Add off-set
        LR      IS,A
      LR      A,I            Look to RB empty squares
      SL      4
      LR      0,A
      LR      A,S
      SR      4
      SR      1
      AS      0
      NS      3
      LR      3,A            Pieces that can move RB
        BZ      LBN
        LIS     H'2'
        LR      5,A
        PI      STMV
        CLR
        XS      6
        BNZ     NORF
LBN     LI      ISA
        AS      4               Add byte off-set
        LR      IS,A            Get to initial byte
        LR      A,S
        LR      3,A
        PI      BKT
        BZ      NORT
        LI      ISE-1
        AS      4               Add off-set
        LR      IS,A
      LR      A,I               Look to LB empty squares
      SL      4
      SL      1
      LR      0,A
      LR      A,S
      SR      4
      AS      0
      NS      3
      LR      3,A            Pieces that can move LB
        BZ      NORT
        LIS     H'3'
        LR      5,A
        PI      STMV
        CLR
        XS      6
        BZ      NORT
NORF    JMP     SELE
*We get here if we want to compute mobility and also if no moves found
NORT    LR      A,4
        INC
        NI      H'3'
        LR      4,A
        BZ      NOR0
        JMP     RFN             Go round again for next byte
NOR0    CLR
        XS      2               Get mobility count
        BNZ     NOR1
        JMP     AFT             Woops! no move found
NOR1    LR      A,HL            Where are we?
        SR      4               Get Ply number
        AI      -H'1'
        BNZ     NOR2            Checking for possible player's moves?
        PI      BORD            Put up board for player
        JMP     PMOV            Yes, so let him move
NOR2    DCI     PLY0            Player's choice of ply
        AM
        LR      DC,H            Reset DC
        BM      NOR4            Go on in this case
        BNZ     NOR3            Stop for sure
        LI      H'FD'           Decision based on previous move
        ADC
        LM
        NI      H'10'           Test jump flag
        LR      DC,H
        BNZ     NOR4            Go on if previous move was a jump
NOR3    JMP     EVAL
NOR4    LR      A,HL
        SR      4
        AI      -H'2'
        BM      NOR7
        DCI     MOBS
        ADC
        LR      A,2
        ST                      Save mobility in MOBS space indexed by ply
NOR7    JMP     SELE
* AFT
MAT     EQU     H'0'            Register used for Material Adv. term
POT     EQU     H'6'            Register used for Positional Adv. term
HLS     EQU     H'4'            Register to save HL off-set
*No more moves found so time to back up
AFT     LR      A,HL            Prepare to back up
        CI      H'20'
        BNZ     AFT0            Not at end of tree search
*Prepare for verification of player's reply
        AI      H'F0'           Back to player's board
        LR      HL,A
        LR      A,7
        COM                     Reverse sides
        LR      7,A
        DCI     PLMV            This space is also used by TREE routine
        CLR                     Clear first byte
        ST
        JMP     FIND            Get verification info for move
AFT0    SR      4
        AI      -H'2'           SCOR not saved for HL=10
        SL      1               2 bytes per entry
        DCI     SCOR
        ADC
        LR      Q,DC            We'll use this as reference point
        LM
        LR      MAT,A             The current material advantage term
        LM
        LR      POT,A             The current positional term
        LR      A,HL
        CI      H'30'
        BNZ     AFTE            Must test for double jump and continuation
        LR      DC,Q            HL=30 case
        LIS     H'1'
        COM                     Fast way for -2
        ADC
        LR      Q,DC
        LR      A,POT
        COM                     Make negative
        INC
        LR      POT,A
        LR      A,MAT
        COM
        INC
        LR      MAT,A
        CM
        BM      AF3S            Back score for sure
        BNZ     AF3B            Do not back score
        LR      A,POT
        CM
        BP      AF3B            Do not back score
AF3S    LR      DC,Q            Backing score
        LR      A,MAT
        ST
        LR      A,POT
        ST
        LR      DC,H            and saving board
        XDC
        DCI     TREE
        LISU    2
        LISL    0
        LIS     H'1'
        SL      4               Fast H'10'
        LR      S,A
        PI      TRAN
AF3B    JMP     AF1B            Back level by 1
* HL>30 case
AFTE    LR      DC,H            EVAL enters here
        LIS     H'1'            Neg. ACTM for passed board
        COM                     Fast -2
        ADC
        CLR
        XM                      Is -1 board passed
        BM      AFC1            Yes
        LI      H'EF'           Is -2 board passed 
        ADC
        CLR
        XM
        BM      AFN3            Yes
* -1 and -2 boards not passed
        LIS     H'3'            Try to prune
        COM                     Fast -H'4'
        LR      DC,Q
        ADC
        LR      A,MAT
        CM
        BM      AFN3            Can not prune
        BNZ     AFN2            Can prune
        LR      A,POT           MAT's are equal
        CM
        BM      AFN3            Can not prune
AFN2    JMP     AF2B            To back 2 levels
AFN3    LIS     H'1'            No, try normal back up
        COM                     Fast -H'2'
        LR      DC,Q
        ADC
        LR      Q,DC
        LR      A,POT           with neg. scores
        COM
        INC
        LR      POT,A
        LR      A,MAT
        COM
        INC
        LR      MAT,A
        CM
        BM      AFN4            Do back score
        BNZ     AFN5            Don't back score
        LR      A,POT           Try POT terms
        CM
        BP      AFN5            Don't back score
AFN4    LR      DC,Q            Backing score
        LR      A,MAT
        ST
        LR      A,POT
        ST
AFN5    JMP     AF1B            To back 1 level
* -1 board is passed so this was a multiple jump
AFC1    LR      A,HL
        NI      H'10'           Is HL odd?
        BNZ     AFD1            Yes, may want to save board
* HL is even case, so board should not be saved
AFE1    LIS     H'3'            Should back 2 however
        COM                     Fast -H'4'
        LR      DC,Q            Check on score
        ADC
        LR      Q,DC
        LR      A,MAT
        CM
        BM      AFE2            Should back score
        BNZ     AFE3            Should not back score
        LR      A,POT           Must check POT term
        CM
        BP      AFE3            Should not back score
AFE2    LR      DC,Q            Back score
        LR      A,MAT
        ST
        LR      A,POT
        ST
AFE3    JMP     AF2B            To back 2 levels
* HL is odd, may need to save board
AFD1    LI      H'DE'           We may want to save board
        LR      HLS,A           Check on board back 3 levels
AFD2    LR      DC,H
        ADC                     Back to start of continuation
        CLR
        XM
        BP      AFD3            As far as we can go
        LIS     H'E'
        SL      4               Fast H'E0'


        AS      HLS
        LR      HLS,A
        BR      AFD2
AFD3    LR      A,HLS
        SR      4
        CI      H'2'            Back to HLS=2E
        BNZ     AFE1            Handle as if HL was even
        DCI     SCOR+2          Compare score with HL=30 level
        LR      A,MAT
        CM
        BM      AFD4            Maybe should back
        BNZ     AF2B            Should back only 2 levels
        LR      A,POT
        CM
        BP      AF2B            Back 2 levels without score
AFD4    DCI     SCOR            Now compare with HL=20 level
        LR      A,POT           after sign change
        COM
        INC
        LR      POT,A
        LR      A,MAT
        COM
        INC
        LR      MAT,A
        CM
        BM      AFD5            Back score
        BNZ     AF2B            No, just back 2 levels
        LR      A,POT
        CM
        BP      AF2B            Just back 2 levels
AFD5    DCI     SCOR            Now save scores
        LR      A,MAT
        ST
        LR      A,POT
        ST
        LR      DC,H            and save board at TREE
        XDC
        DCI     TREE
        LISU    2
        LISL    0
        LIS     H'1'
        SL      4               Fast H'10'
        LR      S,A
        PI      TRAN
AF2B    LIS     H'E'            Back 2 levels
        SL      4               Fast H'E0'
        BR      AFBB
AF1B    LR      A,7             Reverse sides and back 1 level
        COM
        LR      7,A
        LIS     H'F'            Back 1 level
        SL      4               Fast H'F0'
AFBB    AS      HL
        LR      HL,A
        LR      DC,H
        PI      RASC
        JMP     SELE
* EVAL
* HLS used temporarily in multiply routine
EVAL    LISU    4                 Compute the material advantage term
        LISL    6                 Get to ACTM
        LR      A,I
        LR      MAT,A             ACTM
        LR      A,I
        LR      HLS,A             PASM
        COM
        INC
        AS      MAT
        LR      3,A             ACTM-PASM
        BP      EVA0
        COM
        INC
EVA0    LR      1,A             |A-P|
        LR      A,MAT
        AS      HLS             A+P
        COM
        INC                     -(A+P)
        DCI     AP20
        AM                      Add initial value +5
        SR      1               and divide by 2
        LR      HLS,A           Save temporarily, multiply by
        CLR                     by smaller pos. # in 1
        LR      MAT,A             Product into MAT
        LR      A,1
EVA1    NI      H'1'            Is the rightmost bit a 1?
        BZ      EVA2            No
        LR      A,HLS
        AS      MAT
        LR      MAT,A
EVA2    LR      A,HLS
        SL      1
        LR      HLS,A
        LR      A,1
        SR      1
        LR      1,A
        BNZ     EVA1            Product is not complete
        CI      H'3E'
        BP      EV21
        LI      H'3E'           Limit range to avoid CM trouuble
EV21    CLR
        XS      3               To get sign
        LR      A,MAT
        BP      EVA3
        COM
        INC
        LR      MAT,A             Material advantage with sign
EVA3    LR      A,HL
        SR      4
        AI      -H'2'
        LR      5,A             Save PLY
        DCI     MOBS            Compute mobility term
        AI      -H'1'
        ADC
        LM                      Get earlier mobility
        COM
        INC
        AS      2               Add current mobility
        CI      H'C'            Difference limited to |12|
        BP      EVA4
        LIS     H'C'
EVA4    CI      -H'C'
        BM      EVA5
        LI      -H'C'
EVA5    SL      1               Make room for ply term
        SL      1               Would like to shift more
        LR      POT,A           Save difference (and free 2)
        CLR
        AS      MAT
        BNZ     EVA6
        CLR     
        AS      POT
EVA6    LR      A,5             Get ply value
        BM      EVA7            Test sign of significant term
        COM                     If pos. we add H'C'-PLY
        INC
        AI      H'C'
        BR      EVA8
EVA7    AI      -H'C'           If neg. we add PLY-H'C'
EVA8    AS      POT             Add it in
        LR      POT,A           Positional term with PLY
        LR      A,HL
        SR      4
        AI      -H'2'
        SL      1
        DCI     SCOR
        ADC
        LR      Q,DC
        JMP     AFTE            AFT routine handles from here on
* EMPT WAST BRAK
EMPT    LR      K,P             Empty squares in O'51' thru O'54'
        LISU    ELOC            with guard bytes in 50 and 55
        LISL    0
        CLR
        LR      S,A             Make sure guard byte is empty
        LISU    PLOC            Start with ACTIVE
        LIS     H'4'
        LR      0,A
        BR      EMP3
EMP2    LR      A,IS
        AI      H'30'           Actually subtracting 16
        LR      IS,A
EMP3    LR      A,S
        LR      1,A
        LR      A,IS
        AI      4
        LR      IS,A
        LR      A,S
        AS      1
        LR      1,A
        LR      A,IS
        AI      H'D'            Add 13 get to the correct EMPTY locat
        LR      IS,A
        LR      A,1
        COM                     Reverse 1's and 0's
        LR      S,A
        DS      0
        BNZ     EMP2
        LR      A,I             To index only
        CLR
        LR      S,A             Upper guard byte
        PK
*-*-*-*-*-*-*-*-*-*
*First replies (maximum of 4 each)
BOK2    DC      H'33'   24,20  24-20    To 12-16
        DC      H'33'   24-20, 24-20
        DC      H'43'   23-19, 24-20    To 11-15
        DC      H'20'   22-17, 24-19
        DC      H'22'   22-17, 22-17    To 10-14
        DC      H'22'   22-17, 22-17
        DC      H'55'   22-18, 22-18    To  9-13
        DC      H'55'   22-18, 22-18
        DC      H'31'   24-20, 23-18    To 11-16
        DC      H'45'   24-19, 22-18
        DC      H'66'   21-17, 21-17    To 10-15
        DC      H'66'   21-17, 21-17
        DC      H'55'   22-18, 22-18    To  9-14
        DC      H'55'   22-18, 22-18
*-*-*-
WAST    LR      K,P        Delay loop to WASTE some time
        LIS     H'4'
        LR      0,A
WAS2    LIS     H'F'
        LR      1,A
WAS3    CLR
        LR      2,A
WAS4    DS      2
        BNZ     WAS4
        DS      1
        BNZ     WAS3
        NOP
        NOP
        NOP
        PK
*
BRAK    LR      A,HL
        SR      4
        DCI     H'0C2B'
        CM
        BZ      BRA2
        JMP     SELE
BRA2    NOP
        NOP
        NOP
        NOP
        JMP     SELE
        DC      0
        DC      0
        DC      0
        DC      0
        DC      0
        DC      0
        DC      0
        DC      0
        DC      0
        DC      0
        DC      0
        DC      0
        DC      0
        DC      0
        DC      0
        DC      0
        DC      0
        DC      0
        DC      0
        DC      0
        DC      0
        DC      0
        DC      0
        DC      0
        DC      0
        DC      0
        DC      0
        DC      0
        END
*-*-*-
*First counter replies (maximum of 2 each)
*NOTE This table will not work as there are 28 possible third move
*nombers that have to be stored and this will take a complete byte for each
*thus requiring 98 bytes for this table.
*
BOK3    DC                              To 12-16 24-19
        DC                              To 12-16 23-18
        DC                              To 12-16 22-17
        DC      H'00'    8-12,  8,12    To 12-16 24-20
        DC      H'00'   16-23, 16,23    To 12-16 23-19
        DC                              To 12-16 22-18
        DC                              To 12-16 21-17
        DC      H'00'   15-24, 15-24    To 11-15 24-19
        DC      H'00'    8-11,  8-11    To 11-15 23-18
        DC      H'60     9-13,  8-11    To 11-15 22-17
        DC      H'00'    8-11,  8-11    To 11-15 24-20
        DC      H'05     8-11,  9-14    To 11-15 23-19
        DC      H'00'   15-22, 15-22    To 11-15 22-18
        DC                              To 11-15 21-17
*-*- THERE WILL BE 49 BYTES OF THESE, EACH WITH 2 COUNTER REPLIES
*-*- The ones listed at present are from Lee's Guide
*       END